package com.xdqzy.baseline.common.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xdqzy.baseline.common.model.PageModel;

import java.util.ArrayList;
import java.util.List;

/**
 * <Description>分页工具类 <br>
 *
 * @author qss<br>
 * @version 1.0<br>
 * @taskId <br>
 */
public class PageUtils {

    /**
     * 默认页码
     */
    private static final Integer PAGE_NUM = 1;

    /**
     * 默认一页记录数量
     */
    private static final Integer PAGE_SIZE = 10;

    /**
     * 最大页数
     */
    private static final Integer MAX_PAGE_SIZE = 100;

    /**
     * 分页包含对象转换辅助方法
     *
     * @param page 分页总的信息
     * @param resultList 分页数据
     * @param <T> 要转换的具体类型
     * @return 转换后的分页对象
     */
    public static <T> PageModel<T> buildPageModel(Page<T> page, List<T> resultList) {
        PageModel<T> pageModel = new PageModel<>();

        pageModel.setPageNum(page.getPages());
        pageModel.setPageSize(page.getSize());
        pageModel.setPages(page.getPages());
        pageModel.setTotal(page.getTotal());

        if (null == resultList) {
            pageModel.setResultList(new ArrayList<>());
        } else {
            pageModel.setResultList(resultList);
        }

        return pageModel;
    }

    /**
     * 获取分页索引
     *
     * @param pageNum 分页索引
     * @return 分页索引
     */
    public static Integer getPageNum(Integer pageNum) {
        if (pageNum == null || pageNum <= 0) {
            return PAGE_NUM;
        }
        return pageNum;
    }

    /**
     * 获取分页大小
     *
     * @param pageSize 分页大小
     * @return 分页大小
     */
    public static Integer getPageSize(Integer pageSize) {
        if (pageSize == null || pageSize <= 0) {
            return PAGE_SIZE;
        }
        if (pageSize >= MAX_PAGE_SIZE) {
            return PAGE_SIZE;
        }
        return pageSize;

    }

    /**
     * 获取有多少页
     *
     * @param pageSize 每页多少条
     * @param total 总条数
     * @return 页数
     */
    public static int getPageTotal(int pageSize, long total) {
        int pageTotal = 0;
        if (pageSize == 0) {
            return pageTotal;
        } else if (total % pageSize == 0) {
            return (int) (total / pageSize);
        } else {
            pageTotal = (int) (total / pageSize) + 1;
        }
        return pageTotal;
    }

    /**
     * 获取空页对象
     *
     * @param <T> 空页类型
     * @return page 空页信息
     */
    public static <T> PageModel<T> getEmptyPage() {
        PageModel<T> page = new PageModel<>();
        page.setResultList(new ArrayList<>());
        return page;
    }

    /**
     * 私有构造
     */
    private PageUtils() {
    }
}
